package cn.itcast.io.a.file;


import cn.itcast.io.a.file.filefilter.FileFilterByDir;
import cn.itcast.io.a.file.filefilter.FileFilterByFile;
import cn.itcast.io.a.file.filefilter.FileNameFilterByJava;
import cn.itcast.io.a.file.filefilter.FileNameFilterBySuffix;

import java.io.File;

public class FileMethodDemo4 {

    // 需求：获取给定文件目录中的内容，只要.java文件
    public static void main(String[] args) {
        File dir = new File("C:\\Users\\hz21076971\\Desktop\\myJava\\rabbitmq-helloworld");

        // 1. 得到所有的文件名(初步实现)
        String[] fileNameList = dir.list();
        for (String f : fileNameList) {
            if (f.endsWith(".java")) {
                System.out.println(f);
            }
        }

        System.out.println("---------");
        // 2. 通过文件对象实现
        File[] files = dir.listFiles();
        extracted(files, ".java");

        System.out.println("-----------");
        // 3. 通过文件名称过滤器实现
        File[] files1 = dir.listFiles(new FileNameFilterByJava());
        extracted(files1);

        System.out.println("---------");
        // 扩展文件名称过滤器，使其可以过滤任意扩展名的文件
        File[] files2 = dir.listFiles(new FileNameFilterBySuffix(".class"));
        extracted(files2);

        System.out.println("------------");
        // 按照文件进行过滤，比如过滤掉文件，保留目录
        File[] files3 = dir.listFiles(new FileFilterByDir());
        extracted(files3);

        System.out.println("----------");
        File[] files4 = dir.listFiles(new FileFilterByFile());
        extracted(files4);

    }

    private static void extracted(File[] files1) {
        for (File file1 : files1) {
            System.out.println(file1);
        }
    }

    private static void extracted(File[] files, String suffix) {
        for (File f : files) {
            if (f.getName().endsWith(suffix)) {
                System.out.println(f);
            }
        }
    }

}
